package com.cloud.common.core.util;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.UUID;

/**
 * @author: Dream_xun
 * @date: 2020/7/31 18:06
 * @description: Redis token 生成工具类
 */
@Component
public class GenerateTokenUtils {
	@Autowired
	private RedisUtils redisUtils;

	/**
	 * 生成令牌
	 *
	 * @param keyPrefix
	 *            令牌key前缀
	 * @param redisValue
	 *            redis存放的值
	 * @return 返回token
	 */
	public String createToken(String keyPrefix, String redisValue) {
        if (StrUtil.isEmpty(redisValue)) {
            new Exception("redisValue Not nul");
        }
        String token = keyPrefix + UUID.randomUUID().toString().replace("-", "");
        redisUtils.set(token, redisValue);
		return token;
	}

	/**
	 * 生成令牌
	 *
	 * @param keyPrefix
	 *            令牌key前缀
	 * @param redisValue
	 *            redis存放的值
	 * @param time
	 *            有效期
	 * @return 返回token
	 */
	public String createToken(String keyPrefix, String redisValue, Long time) {
		if (StrUtil.isEmpty(redisValue)) {
			new Exception("redisValue Not nul");
		}
		String token = keyPrefix + UUID.randomUUID().toString().replace("-", "");
		redisUtils.set(token, redisValue, time);
		return token;
	}

	/**
	 * 根据token获取redis中的value值
	 *
	 * @param token
	 * @return
	 */
	public String getToken(String token) {
		if (StrUtil.isEmpty(token)) {
			return null;
		}
		String value =(String) redisUtils.get(token);
		return value;
	}

	/**
	 * 移除token
	 *
	 * @param token
	 * @return
	 */
	public void removeToken(String token) {
		redisUtils.del(token);
	}

    /**
     * 根据key获取list中的一个值并在list中删除。
     *
     * @param key
     * @return
     */
    public String getListKeyToken(String key) {
        if (!BeanUtil.isEmpty(redisUtils.getRedisTemplate().opsForList().rightPop(key))){
            return redisUtils.getRedisTemplate().opsForList().rightPop(key).toString();
        }
        return "";
    }
}
